//package com.mark.java.dao;
//
//import org.hibernate.HibernateException;
//import org.hibernate.Query;
//import org.hibernate.Session;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.orm.hibernate4.HibernateCallback;
//import org.springframework.orm.hibernate4.HibernateTemplate;
//
//import java.io.Serializable;
//import java.sql.SQLException;
//import java.util.*;
//import java.util.logging.Logger;
//
///**
// * Created by gml on 17/2/28.
// */
//public class BaseDaoImpl implements IBaseDao {
//
////    private static final Logger logger = Logger.getLogger(BaseDaoImpl.class);
//    private HibernateTemplate hibernateTemplate;
//
//    public HibernateTemplate getHibernateTemplate() {
//        hibernateTemplate.setCacheQueries(true);// 开启二级查询缓存
//        return hibernateTemplate;
//    }
//
//    @Autowired
//    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
//        this.hibernateTemplate = hibernateTemplate;
//    }
//
//    @Override
//    public boolean delete(Object o) {
////        logger.info("删除");
//        try {
//            this.getHibernateTemplate().delete(o);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public boolean delete(Class c, Serializable id) {
////        logger.info("删除");
//        try {
//            this.getHibernateTemplate().delete(get(c, id));
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public Integer delete(final String hql, final Object... values) {
//        return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() {
//
//            @Override
//            public Integer doInHibernate(Session session) throws HibernateException, SQLException {
//                Query q = session.createQuery(hql);
//                if (values != null && values.length > 0) {
//                    for (int i = 0; i < values.length; i++) {
//                        q.setParameter(i, values[i]);
//                    }
//                }
//                return q.executeUpdate();
//            }
//        });
//    }
//
//    @Override
//    public boolean deleteAll(Collection l) {
////        logger.info("删除");
//        try {
//            this.getHibernateTemplate().deleteAll(l);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public boolean update(Object o) {
////        logger.info("更新");
//        try {
//            this.getHibernateTemplate().update(o);
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
//
//    @Override
//    public boolean save(Object o) {
////        logger.info("保存");
//        try {
//            this.getHibernateTemplate().save(o);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public boolean saveOrUpdate(Object o) {
//        try {
//            this.getHibernateTemplate().saveOrUpdate(o);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public boolean saveOrUpdateAll(Collection l) {
////        logger.info("编辑");
//        try {
//            this.getHibernateTemplate().saveOrUpdateAll(l);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public List find(String hql) {
////        logger.info("查询");
//        return this.getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public List find(final String hql, final DataGridReq dgr, final List values) {
//        return this.getHibernateTemplate().execute(new HibernateCallback<List>() {
//
//            @Override
//            public List doInHibernate(Session session) throws HibernateException, SQLException {
//                Query q = session.createQuery(hql);
//                if (values != null && values.size() > 0) {
//                    for (int i = 0; i < values.size(); i++) {
//                        q.setParameter(i, values.get(i));
//                    }
//                }
//                if (dgr == null) {
//                    return q.list();
//                }
//                return q.setFirstResult(dgr.getStart()).setMaxResults(dgr.getLimit() * dgr.getPage()).list();
//            }
//        });
//    }
//
//    @Override
//    public List find(final String hql, final DataGridReq dgr, final Object... values) {
//        return this.getHibernateTemplate().execute(new HibernateCallback<List>() {
//
//            @Override
//            public List doInHibernate(Session session) throws HibernateException, SQLException {
//                Query q = session.createQuery(hql);
//                if (values != null && values.length > 0) {
//                    for (int i = 0; i < values.length; i++) {
//                        q.setParameter(i, values[i]);
//                    }
//                }
//                if (dgr == null) {
//                    return q.list();
//                }
//                return q.setFirstResult(dgr.getStart()).setMaxResults(dgr.getLimit() * dgr.getPage()).list();
//            }
//        });
//    }
//
//    @Override
//    public List find(String hql, Object... values) {
//        return this.getHibernateTemplate().find(hql, values);
//    }
//
//    @Override
//    public boolean update(final String hql, final Object... values) {
//        try {
//            this.getHibernateTemplate().bulkUpdate(hql, values);
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }
//
//    @Override
//    public Object get(Class c, Serializable id) {
//        return this.getHibernateTemplate().get(c, id);
//    }
//
//    @Override
//    public Object load(Class c, Serializable id) {
//        return this.getHibernateTemplate().load(c, id);
//    }
//
//    @Override
//    public Long total(final String hql, final List values) {
//        return this.getHibernateTemplate().execute(new HibernateCallback<Long>() {
//
//            @Override
//            public Long doInHibernate(Session session) throws HibernateException, SQLException {
//                Query q = session.createQuery(hql);
//                if (values != null && values.size() > 0) {
//                    for (int i = 0; i < values.size(); i++) {
//                        q.setParameter(i, values.get(i));
//                    }
//                }
//                return (Long) q.uniqueResult();
//            }
//        });
//    }
//
//    @Override
//    public Long total(final String hql, final Object... values) {
//        return this.getHibernateTemplate().execute(new HibernateCallback<Long>() {
//
//            @Override
//            public Long doInHibernate(Session session) throws HibernateException, SQLException {
//                Query q = session.createQuery(hql);
//                if (values != null && values.length > 0) {
//                    for (int i = 0; i < values.length; i++) {
//                        q.setParameter(i, values[i]);
//                    }
//                }
//                return (Long) q.uniqueResult();
//            }
//        });
//    }
//
//    @Override
//    public boolean updateOneByProperty(Class clazz, Serializable id, String pName, Object pValue) {
//        String hql = "update " + clazz.getName() + " entity set entity." + pName + " = '" + pValue + "' where entity.id = " + id;
//        getHibernateTemplate().bulkUpdate(hql);
//        return true;
//    }
//
//    @Override
//    public boolean updateOneByPropertys(Class clazz, Serializable id, List<String> pName, List<Object> pValue) {
//        String hql = "update " + clazz.getName() + " entity set entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " = '" + pValue.get(i) + "', entity.";
//        }
//        hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'where entity.id = " + id;
//        System.out.println(hql);
//        getHibernateTemplate().bulkUpdate(hql);
//        return true;
//    }
//
//    @Override
//    public boolean updateOneByPropertys(Class clazz, Serializable id, Map<String, Object> map) {
//        String hql = "update " + clazz.getName() + " entity set entity.";
//        Set set = map.entrySet();
//        if (set != null) {
//            Iterator iterator = set.iterator();
//            while (iterator.hasNext()) {
//                Entry entry = (Entry) iterator.next();
//                Object key = entry.getKey();
//                Object value = entry.getValue();
//                hql += key + " = '" + value + "' and entity.";
//            }
//        }
//        hql = hql.substring(0, hql.length() - 12);
//        hql += "'where entity.id = " + id;
//        System.out.println(hql);
//        getHibernateTemplate().bulkUpdate(hql);
//        return true;
//    }
//
//    /**
//     * 根据属性查询
//     *
//     * @param clazz
//     * @param pName
//     * @param pValue
//     * @return
//     */
//    @Override
//    public Object getSingleByProperty(Class clazz, String pName, Object pValue) {
//
//        String hql = "from " + clazz.getName() + " entity where entity." + pName + " = '" + pValue + "'";
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return os.get(0);
//        } else {
//            return null;
//        }
//    }
//
//    /**
//     * 根据属性查询
//     *
//     * @param clazz
//     * @param pName
//     * @param pValue
//     * @return
//     */
//    @Override
//    public boolean ifHasOneByProperty(Class clazz, String pName, Object pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity." + pName + " = '" + pValue + "'";
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    /**
//     * 根据属性查询
//     *
//     * @param clazz
//     * @param pName
//     * @param pValue
//     * @return
//     */
//    @Override
//    public List<Object> getObjectsByAnyProperty(Class clazz, List<String> pName, List<Object> pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " = '" + pValue.get(i) + "' or entity.";
//        }
//        hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";
//        System.out.println(hql);
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return os;
//        } else {
//            return null;
//        }
//    }
//
//    @Override
//    public boolean ifHasOneByPropertys(Class clazz, List<String> pName, List<Object> pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " = '" + pValue.get(i) + "' and entity.";
//        }
//        hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";
//        System.out.println(hql);
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    @Override
//    public Object getSingleByPropertys(Class clazz, List<String> pName, List<Object> pValue) {
//
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " = '" + pValue.get(i) + "' and entity.";
//        }
//        hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";
//        System.out.println(hql);
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return os.get(0);
//        } else {
//            return null;
//        }
//    }
//
//    @Override
//    public Object getSingleByPropertys(Class clazz, Map<String, Object> map) {
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        Set set = map.entrySet();
//        if (set != null) {
//            Iterator iterator = set.iterator();
//            while (iterator.hasNext()) {
//                Entry entry = (Entry) iterator.next();
//                Object key = entry.getKey();
//                Object value = entry.getValue();
//                hql += key + " = '" + value + "' and entity.";
//            }
//        }
//        hql = hql.substring(0, hql.length() - 12);
//        System.out.println("hql = " + hql);
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return os.get(0);
//        } else {
//            return null;
//        }
//    }
//
//    @Override
//    public boolean ifHasOneByPropertys(Class clazz, Map<String, Object> map) {
//
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        Set set = map.entrySet();
//        if (set != null) {
//            Iterator iterator = set.iterator();
//            while (iterator.hasNext()) {
//                Entry entry = (Entry) iterator.next();
//                Object key = entry.getKey();
//                Object value = entry.getValue();
//                hql += key + " = '" + value + "' and entity.";
//            }
//        }
//        hql = hql.substring(0, hql.length() - 12);
//        List<Object> os = getHibernateTemplate().find(hql);
//        if (os != null && !os.isEmpty()) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    /**
//     * 查询所有
//     */
//    @Override
//    public List<Object> getObjects(Class clazz) {
//        String hql = "from " + clazz.getName();
//        List list = getHibernateTemplate().find(hql);
//        return list;
//    }
//
//    /**
//     * 根据属性查询 全部
//     *
//     * @param clazz
//     * @param pName
//     * @param pValue
//     * @return
//     */
//    @Override
//    public List<Object> getObjectsByProperty(Class clazz, String pName, Object pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity." + pName + " = '" + pValue + "'";
//        return getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<Object> pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " = '" + pValue.get(i) + "' and ";
//        }
//        hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";
//        return getHibernateTemplate().find(hql);
//    }
//
//    /**
//     * 根据属性查询 全部
//     *
//     * @param clazz
//     * @param pName
//     * @param pValue
//     * @return
//     */
//    @Override
//    public List<Object> getObjectsByProperty(Class clazz, String pName, String operator, Object pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity." + pName + " " + operator + pValue;
//        return getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<String> operator, List<Object> pValue) {
//        String hql = "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pName.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pName.get(i) + " " + operator.get(i) + " '" + pValue.get(i) + "' and ";
//        }
//        hql += pName.get(maxIndex) + " " + operator.get(maxIndex) + " '" + pValue.get(maxIndex) + "'";
//        System.out.println("hql = " + hql);
//        return getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public Object getValueByPropertys(Class clazz, Map<String, Object> map, String selectName) {
//        String hql = "select entity." + selectName + "from " + clazz.getName() + " entity where entity.";
//        Set set = map.entrySet();
//        if (set != null) {
//            Iterator iterator = set.iterator();
//            while (iterator.hasNext()) {
//                Entry entry = (Entry) iterator.next();
//                Object key = entry.getKey();
//                Object value = entry.getValue();
//                hql += key + " = '" + value + "' and entity.";
//            }
//        }
//        hql = hql.substring(0, hql.length() - 12);
//        System.out.println("hql = " + hql);
//        return getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public Object getValueByProperty(Class clazz, String pName, Object pValue, String selectName) {
//        String hql = "select entity." + selectName + " from " + clazz.getName() + " entity where entity." + pName + " = '" + pValue + "'";
//        System.out.println("hql = " + hql);
//        return getHibernateTemplate().find(hql);
//    }
//
//    @Override
//    public Object getValueByPropertys(Class clazz, List<String> pNames, List<Object> pValues, String selectName) {
//        String hql = "select entity." + selectName + "from " + clazz.getName() + " entity where entity.";
//        int maxIndex = pNames.size() - 1;
//        for (int i = 0; i < maxIndex; i++) {
//            hql += pNames.get(i) + " = '" + pValues.get(i) + "' and ";
//        }
//        hql += pNames.get(maxIndex) + " = '" + pValues.get(maxIndex) + "'";
//        System.out.println("hql = " + hql);
//        return getHibernateTemplate().find(hql);
//    }
//}